import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

/**
 * 通用确认对话框
 * 用于显示确认、警告、信息等提示
 */
Dialog {
    id: root
    
    // ========================================
    // 公开属性
    // ========================================
    property string dialogTitle: ""
    property string message: "确认执行此操作？"
    property string detailText: ""
    property string confirmText: "确认"
    property string cancelText: "取消"
    property int dialogType: 0  // 对话框类型：0=Confirm, 1=Warning, 2=Danger, 3=Info
    property bool showCancelButton: true
    
    // 回调函数（使用 var 类型存储函数）
    property var confirmCallback: null
    property var cancelCallback: null
    
    // 对话框类型常量
    readonly property int typeConfirm: 0   // 确认（蓝色）
    readonly property int typeWarning: 1   // 警告（橙色）
    readonly property int typeDanger: 2    // 危险（红色）
    readonly property int typeInfo: 3      // 信息（灰色）
    readonly property int typeError: 4     // 错误（红色，只有确定按钮）
    
    // ========================================
    // 信号
    // ========================================
    signal confirmed()
    signal cancelled()
    
    // ========================================
    // 对话框配置
    // ========================================
    modal: true
    closePolicy: Popup.CloseOnEscape
    anchors.centerIn: parent
    
    // 固定宽度，避免太窄
    width: 520
    
    // 设置标准边距
    padding: 0
    topPadding: 0
    bottomPadding: 0
    leftPadding: 0
    rightPadding: 0
    
    // 对话框样式
    background: Rectangle {
        color: "white"
        radius: 10
        border.color: "#e5e7eb"
        border.width: 1
        
        // 阴影效果
        layer.enabled: true
        layer.effect: DropShadow {
            horizontalOffset: 0
            verticalOffset: 4
            radius: 16
            samples: 32
            color: Qt.rgba(0, 0, 0, 0.1)
        }
    }
    
    // 不使用 header，全部放在 contentItem 中
    header: null
    
    // ========================================
    // 内容区域（包含标题、图标、消息）
    // ========================================
    contentItem: Rectangle {
        color: "white" // single surface prevents visual split
        radius: 10
        implicitWidth: 520
        clip: true
        
        ColumnLayout {
            anchors.fill: parent
            spacing: 0
            
            // 标题区域
            Rectangle {
                Layout.fillWidth: true
                Layout.preferredHeight: 70
                color: "white"
                
                RowLayout {
                    anchors.fill: parent
                    anchors.margins: 20
                    spacing: 12
                    
                    // 图标
                    Rectangle {
                        Layout.preferredWidth: 40
                        Layout.preferredHeight: 40
                        radius: 20
                        color: getIconBackgroundColor()
                        
                        Text {
                            anchors.centerIn: parent
                            text: getIconText()
                            font.pixelSize: 22
                        }
                    }
                    
                    // 标题文字
                    Text {
                        text: root.dialogTitle !== "" ? root.dialogTitle : getTitle()
                        font.pixelSize: 18
                        font.bold: true
                        color: "#1f2937"
                        Layout.fillWidth: true
                    }
                }
                
                // 底部分隔线
                Rectangle {
                    anchors.bottom: parent.bottom
                    anchors.left: parent.left
                    anchors.right: parent.right
                    height: 1
                    color: "#e5e7eb"
                }
            }
            
            // 消息内容区域
            Rectangle {
                Layout.fillWidth: true
                Layout.minimumHeight: 100
                Layout.preferredHeight: messageColumn.implicitHeight + 40
                color: "white"
                
                ColumnLayout {
                    id: messageColumn
                    anchors.fill: parent
                    anchors.margins: 20
                    anchors.topMargin: 15
                    anchors.bottomMargin: 15
                    spacing: 12
                    
                    // 主消息
                    Text {
                        text: root.message
                        font.pixelSize: 15
                        color: "#374151"
                        wrapMode: Text.WordWrap
                        Layout.fillWidth: true
                    }
                    
                    // 详细信息（可选）
                    Text {
                        visible: root.detailText !== ""
                        text: root.detailText
                        font.pixelSize: 13
                        color: "#6b7280"
                        wrapMode: Text.WordWrap
                        Layout.fillWidth: true
                    }
                }
            }
            
            // 顶部分隔线（按钮区域）
            Rectangle {
                Layout.fillWidth: true
                Layout.preferredHeight: 1
                color: "#e5e7eb"
            }
            
            // 按钮区域
            Rectangle {
                Layout.fillWidth: true
                Layout.preferredHeight: 80
                color: "#f9fafb"
                
                RowLayout {
                    anchors.centerIn: parent
                    spacing: 12
                    
                    // 取消按钮
                    Button {
                        visible: root.showCancelButton
                        text: root.cancelText
                        Layout.preferredWidth: 110
                        Layout.preferredHeight: 40
                        
                        background: Rectangle {
                            color: parent.hovered ? "#f3f4f6" : "white"
                            border.color: "#d1d5db"
                            border.width: 1
                            radius: 6
                            
                            Behavior on color {
                                ColorAnimation { duration: 150 }
                            }
                        }
                        
                        contentItem: Text {
                            text: parent.text
                            font.pixelSize: 14
                            color: "#374151"
                            horizontalAlignment: Text.AlignHCenter
                            verticalAlignment: Text.AlignVCenter
                        }
                        
                        onClicked: {
                            root.cancelled()
                            root.close()
                        }
                    }
                    
                    // 确认按钮
                    Button {
                        text: root.confirmText
                        Layout.preferredWidth: 110
                        Layout.preferredHeight: 40
                        
                        background: Rectangle {
                            color: parent.hovered ? getConfirmHoverColor() : getConfirmColor()
                            border.width: 0
                            radius: 6
                            
                            Behavior on color {
                                ColorAnimation { duration: 150 }
                            }
                        }
                        
                        contentItem: Text {
                            text: parent.text
                            font.pixelSize: 14
                            color: "white"
                            font.bold: true
                            horizontalAlignment: Text.AlignHCenter
                            verticalAlignment: Text.AlignVCenter
                        }
                        
                        onClicked: {
                            root.confirmed()
                            if (root.confirmCallback) {
                                root.confirmCallback()
                            }
                            root.close()
                        }
                    }
                }
            }
        }
    }
    
    // ========================================
    // 对话框关闭事件
    // ========================================
    onRejected: {
        root.cancelled()
        if (root.cancelCallback) {
            root.cancelCallback()
        }
    }
    
    // ========================================
    // JavaScript 辅助函数
    // ========================================
    
    // 获取对话框标题
    function getTitle() {
        switch(root.dialogType) {
            case 0: return "确认操作"
            case 1: return "警告"
            case 2: return "危险操作"
            case 3: return "提示"
            case 4: return "错误"
            default: return "确认"
        }
    }
    
    // 获取图标文字
    function getIconText() {
        switch(root.dialogType) {
            case 0: return "❓"
            case 1: return "⚠️"
            case 2: return "❌"
            case 3: return "ℹ️"
            case 4: return "⛔"
            default: return "❓"
        }
    }
    
    // 获取图标背景颜色
    function getIconBackgroundColor() {
        switch(root.dialogType) {
            case 0: return Qt.rgba(59/255, 130/255, 246/255, 0.1)  // 蓝色
            case 1: return Qt.rgba(245/255, 158/255, 11/255, 0.1)  // 橙色
            case 2: return Qt.rgba(239/255, 68/255, 68/255, 0.1)   // 红色
            case 3: return Qt.rgba(107/255, 114/255, 128/255, 0.1) // 灰色
            case 4: return Qt.rgba(239/255, 68/255, 68/255, 0.15)  // 深红色（错误）
            default: return Qt.rgba(59/255, 130/255, 246/255, 0.1)
        }
    }
    
    // 获取确认按钮颜色
    function getConfirmColor() {
        switch(root.dialogType) {
            case 0: return "#3b82f6"  // 蓝色 - 确认
            case 1: return "#f59e0b"  // 橙色 - 警告
            case 2: return "#ef4444"  // 红色 - 危险
            case 3: return "#6b7280"  // 灰色 - 信息
            case 4: return "#ef4444"  // 红色 - 错误
            default: return "#3b82f6"
        }
    }
    
    // 获取确认按钮悬停颜色
    function getConfirmHoverColor() {
        switch(root.dialogType) {
            case 0: return "#2563eb"  // 深蓝色
            case 1: return "#d97706"  // 深橙色
            case 2: return "#dc2626"  // 深红色
            case 3: return "#4b5563"  // 深灰色
            case 4: return "#dc2626"  // 深红色
            default: return "#2563eb"
        }
    }
    
    // ========================================
    // 便捷方法：快速显示不同类型的对话框
    // ========================================
    
    // 显示确认对话框（支持回调函数）
    function showConfirm(title, msg, callback) {
        dialogType = typeConfirm
        dialogTitle = title || ""
        message = msg || "确认执行此操作？"
        detailText = ""
        confirmText = "确认"
        cancelText = "取消"
        showCancelButton = true
        confirmCallback = callback || null
        cancelCallback = null
        open()
    }
    
    // 显示警告对话框
    function showWarning(title, msg, callback) {
        dialogType = typeWarning
        dialogTitle = title || "警告"
        message = msg || "请注意！"
        detailText = ""
        confirmText = "我知道了"
        cancelText = "取消"
        showCancelButton = true
        confirmCallback = callback || null
        cancelCallback = null
        open()
    }
    
    // 显示危险操作对话框
    function showDanger(title, msg, callback) {
        dialogType = typeDanger
        dialogTitle = title || "危险操作"
        message = msg || "此操作不可撤销！"
        detailText = ""
        confirmText = "确认删除"
        cancelText = "取消"
        showCancelButton = true
        confirmCallback = callback || null
        cancelCallback = null
        open()
    }
    
    // 显示信息提示框（只有确定按钮）
    function showInfo(title, msg) {
        dialogType = typeInfo
        dialogTitle = title || "提示"
        message = msg || "操作提示"
        detailText = ""
        confirmText = "确定"
        showCancelButton = false
        confirmCallback = null
        cancelCallback = null
        open()
    }
    
    // 显示错误提示框（只有确定按钮）
    function showError(title, msg) {
        dialogType = typeError
        dialogTitle = title || "错误"
        message = msg || "操作失败"
        detailText = ""
        confirmText = "确定"
        showCancelButton = false
        confirmCallback = null
        cancelCallback = null
        open()
    }
    
    // ========================================
    // 简化的 DropShadow 组件
    // ========================================
    component DropShadow: Item {
        property real horizontalOffset: 0
        property real verticalOffset: 0
        property real radius: 8
        property int samples: 16
        property color color: "black"
        
        // 简化版阴影效果（实际项目中建议使用 Qt5Compat.GraphicalEffects）
    }
}
